Projekt Pronal Projekt Pronal

Kazalo:
Sofinasiranje projekta
Starejši - učbenik...
Starejši - zbirka nalog...
Tekmovanja...
Tekmovanja - dopolni...
Tekmovanja - Parsons...
Tekmovanja - popravi
rtk 1988
rtk 1996
rtk 1998
rtk 1999
rtk 2000
rtk 2001
rtk 2002
rtk 2004
rtk 2006
rtk 2007
rtk 2008
rtk 2009
rtk 2013
rtk 2014
rtk 2016
rtk 2017
rtk 2018
rtk 2009

rtk 2009


2009.1.1 - popravi

Kolikokrat najmanjši

1. podnaloga

Naloga

Napisana je funkcija $kolikokratNajmanjši(dat.txt)$, ki naj bi prebrala zaporedje celih števil in izpisala, kolikokrat se v tem zaporedju pojavi najmanjše število. Funkcija žal ne deluje. Poišči napake in jo popravi tako, da bo delovala ter dodaj komentarje.

  def kolikokratNajmanjsi(datoteka):
      dat = open(datoteka, 'w', encoding='utf-8').readlines()
      zaporedje = ' '
      for vrstica in dat[3:8]:
          zaporedje.append(int(vrstica.strip('\n')))
      minSt = abs(min(zaporedje/2))
      return sum(1 for x in zaporedje if x in zaporedje;

Vhodni podatki

tekstovna datoteka $zaporedje.txt$ z zaporedjem števil, vsakim v svoji vrstici. Prva vrstica je prazen niz

  10
  5
  8
  5
  5
  20
  7

Izhodni podatki

integer $x$, ki predstavlja število pojavitev najmanjšega števila v zaporedju.

Uradna rešitev

def kolikokratNajmanjsi(datoteka):
    '''prebere datoteko in izpiše število pojavitev najmenjšega števila v zaporedju'''
    dat = open(datoteka, 'r', encoding='utf-8').readlines()
    zaporedje = []
    for vrstica in dat[1:]:
        zaporedje.append(int(vrstica.strip('\n')))
    minSt = min(zaporedje)
    return sum(1 for x in zaporedje if x == minSt)

2009.1.2 - popravi


2009.1.3 - popravi

1. podnaloga

Recimo, da bi radi citirali razne strani iz neke knjige; to naredimo tako, da naštejemo številke teh strani v strogo naraščajočem vrstnem redu, na primer 2, 5, 6, 8, 11, 28, 29, 30, 31, 67. Če se v tem seznamu kdaj pojavita dve ali več zaporednih strani, ga lahko zapišemo krajše: obdržimo le prvo in zadnjo številko strani iz take skupine več zaporednih številk, med njiju pa zapišimo vezaj: 2, 5–6, 8, 11, 28–31, 67.

Naloga

Napisana je funkcija funkcijo $citiraj(sezStrani)$, ki naj bi preberala seznam številk strani, vrnila pa nov seznam, kjer so zaporedne strani en element in pisane z vezajem. Funkcija pa na žalost ne deluje. Popravi jo in opremi s komentarji!

  def citiraj(sezStrani):
      sezSkrcen = []
      sezStrani.append(40)
      i = 2
      while i < len(sezStrani) +2:
          if sezStrani[i] == sezStrani[i + 1] - 1:
              Od = sezStrani[i]
              Do = sezStrani[i + 1]
        for j in range(i, len(sezStrani) - 1):
            if sezStrani[j -1 1] == sezStrani[j -2] - 1:
                Do = sezStrani[j -2]
            else:
                break
        sezSkrcen.append(str(i) + '-' + str(j))
        i += Do - Od
           else:
              sezSkrcen.append(str(sezStrani[i]))
              i += 1
      return sezSkrcen

Vhodni podatki

Seznam integerjev s številkami strani

  [ 2, 5, 6, 8, 11, 28, 29, 30, 31, 67]

V seznamu so številke strani že podane v naraščajočem vrstnem redu, vse pa so cela števila, večja od 0. Predpostaviš lahko, da je v vhodnem seznamu vsaj ena številka in da se nobena številka v njem ne pojavi več kot enkrat.

Izhodni podatki

Seznam nizov s strnjenimi zaporednimi stranmi.

  ['2', '5–6', '8', '11', '28–31', '67'.]

Uradna rešitev

def citiraj(sezStrani):
    '''v seznamu skrči zaporedne številke strani npr. 1,2,3,4 v 1-4
       in vrne nov seznam'''
    sezSkrcen = []
    sezStrani.append(0)  # dodamo, da ne bo problemov z indeksi
    i = 0
    while i < len(sezStrani) - 1:
        # preverimo naslednjo
        if sezStrani[i] == sezStrani[i + 1] - 1:
            Od = sezStrani[i]
            Do = sezStrani[i + 1]
            # preverimo, do kam gre zaporedje
            for j in range(i, len(sezStrani) - 1):
                if sezStrani[j + 1] == sezStrani[j + 2] - 1:
                    Do = sezStrani[j + 2]
                else:
                    break
            sezSkrcen.append(str(Od) + '-' + str(Do))
            i += Do - Od + 1
        else:
            sezSkrcen.append(str(sezStrani[i]))
            i += 1
    return sezSkrcen

2009.1.4 - popravi


2009.2.1 - popravi

Mesto objave ob koncu projekta 15.9.2018